home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Diamond Collection
/
The Diamond Collection (Software Vault)(Digital Impact).ISO
/
cdr23
/
commo642.zip
/
MOSTHOST.MAC
< prev
next >
Wrap
Text File
|
1995-03-18
|
25KB
|
778 lines
MOSTHOST.MAC (Regular version)
by Shad Muegge and Fred Brucker
{:setup} * Set up MOSTHOST options
-------------------------------------------------------------------------------
-Configuration Items--------------Description----------------------------------
-------------------------------------------------------------------------------
{LIGH Y} Modem signal lights
{SETV dospassword,PASSWORD} Password to access the DOS menu
{SETV filedir,%_hom%MHFILE\} Directory for file transfer files
{SETV datadir,%_hom%MHDATA\} Directory for user data file
{SETV hotkeys,n} Hot keys (y/n)
{SETV inact_time,120} Inactivity timer, seconds
{SETV ring_string,RING} String sent from modem to indicate a ring
{SETV connect_string,CONNECT} Result string for a successful connection
-------------------------------------------------------------------------------
{SETV pr_alarm,0} * Turn off protocol alarms
{SETG %inact_time,time_out} * Set up GETString timer
{RTRA y,9,0} * Filter tabs from input
{CLEA}
{SPOC y}
{LOCA y}
{SETE WF3}
{RETURN}
--------------------------------------------* General functions ---------------
{:cls} * Clear the screen
{SEND ^L}
{RETURN}
{:press_any_key} * Pause until a key is pressed
{SEND ^J^MPress Any Key:}
{GETS-H temp,1,PK}
{:PK} {setv temp}
{SEND ^J^M}
{RETURN}
{:dsp_file} * Display a file
{IFEX %dump_file,,DF5} * IN: %dump_file
{SETV count,0}
{ROPE %dump_file,DF3}
{:DF1} {READ dline}
{SEND ^M%dline^J^M}
{INCR count}
{COMP count,23} {IFCO DF4}
{GOTO DF1}
{:DF2} {RCLOSE}
{:DF3} {SETV dline}
{SETV ch}
{SETV count}
{RETURN}
{:DF4} {SETV count,0}
{SEND ^MMore [Y],N,C: }
{CALL get_key}
{IFCO DF1}
{COMP ch,n} {IFCO DF2}
{COMP ch,y} {IFCO DF1}
{COMP ch,c} {IFCO ,DF4}
{SETV count,26}
{GOTO DF1}
{:DF5} {SEND ^J^M^GError: File not found: %dump_file}
{CALL press_any_key}
{RETURN}
{:menu} * Get menu selection
{SEND %prompt [%_tim]: } * OUT: %ch
{CALL get_key} * %ch = ~, if user hit CR at prompt
{IFCO MN1}
{SEND ^J^M}
{COMP ch,*} {IFCO time_out}
{GOTO MN2}
{:MN1} {SETV ch,~}
{SEND ^J^M}
{:MN2} {RETURN}
{:get_key}
{COMP hotkeys,y} {IFCO GK1}
{GETS ch,1}
{GOTO GK2}
{:GK1} {GETS-H ch,1}
{:GK2} {COMP ch}
{RETURN}
{:get_protocol} * Get protcol selection
{PAUS-T 2}
{CALL cls} * OUT: %protocol
{SEND ┌───────────────────────────────────────────────────┐^J^M}
{SEND │ Protocols │^J^M}
{SEND └───────────────────────────────────────────────────┘^J^M}
{SEND [Y] Ymodem^J^M}
{SEND [G] Ymodem-G^J^M}
{SEND [X] Xmodem^J^M}
{SEND [Z] Zmodem^J^M}
{SEND [H] HS/Link^J^M^J^M}
{SETV prompt,Protocol:}
{CALL menu}
{COMP ch,~} {IFCO PG2}
{COMP ch,z} {IFCO PG1}
{COMP ch,y} {IFCO PG1}
{COMP ch,g} {IFCO PG1}
{COMP ch,x} {IFCO PG1}
{COMP ch,h} {IFCO ,PG2}
{:PG1} {SETV protocol,%ch}
{:PG2} {RETURN}
{:send_hslink} * HSLINK download subroutine
{SEND ^J^MStart your HS/Link download now.^J^M}
{CALL h_send}
{COMP %_err,0}
{RETURN}
{:send_zmodem} * ZMODEM download subroutine
{SEND ^J^MStart your Zmodem download now.^J^M}
{CALL z_send}
{COMP %_err,0}
{RETURN}
{:send_ymodem} * YMODEM download subroutine
{SEND ^J^MStart your Ymodem download now.^J^M}
{CALL yb_send}
{COMP %_err,0}
{RETURN}
{:send_xmodem} * XMODEM-1K download subroutine
{SEND ^J^MStart your Xmodem download now.^J^M}
{IFEX %pr_file,,SX1}
{CALL xk_send}
{COMP %_err,0}
{:SX1} {RETURN}
{:recv_hslink} * HSLINK upload subroutine
{SEND ^J^MStart your HS/Link upload now.^J^M}
{CALL h_recv}
{COMP %_err,0}
{RETURN}
{:recv_zmodem} * ZMODEM upload subroutine
{SEND ^J^MStart your Zmodem upload now.^J^M}
{CALL z_recv}
{COMP %_err,0}
{RETURN}
{:recv_ymodem} * YMODEM upload subroutine
{SEND ^J^MStart your Ymodem upload now.^J^M}
{CALL yb_recv}
{COMP %_err,0}
{RETURN}
{:recv_yg} * YMODEM-G upload subroutine
{SEND ^J^MStart your Ymodem-G upload now.^J^M}
{CALL yg_recv}
{COMP %_err,0}
{RETURN}
{:recv_xmodem} * XMODEM-1K upload subroutine
{SEND ^J^MStart your Xmodem upload now.^J^M}
{CALL xc_recv}
{COMP %_err,0}
{RETURN}
{:transfer_file} * Transfer a file upload & download
{PUSH DL2}
{COMP proto,sz} {IFCO send_zmodem} * IN: %proto
{COMP proto,sy} {IFCO send_ymodem} * s + %protocol for downloads
{COMP proto,sg} {IFCO send_ymodem} * r + %protocol for uploads
{COMP proto,sx} {IFCO send_xmodem}
{COMP proto,sh} {IFCO send_hslink}
{COMP proto,rz} {IFCO recv_zmodem}
{COMP proto,ry} {IFCO recv_ymodem}
{COMP proto,rg} {IFCO recv_yg}
{COMP proto,rx} {IFCO recv_xmodem}
{COMP proto,rh} {IFCO recv_hslink}
{SEND ^J^MInvalid protocol ^J^M}
{CALL press_any_key}
{COMP proto,sz} * Set a bad condition for return
{:DL1} {SETV proto}
{POPS}
{RETURN}
{:DL2} {PAUS 2}
{RETURN}
{:get_name}
{SEND ^J^J^MEnter your name: } * Get a name from user
{GETS lname} * OUT: %lname
{COMP lname} * OUT: cond. flag set if null
{RETURN}
{:get_password} * Get a password
{GETS-P pass}
{RETURN}
{:time_out} * Time out user
{POPS-C} * Clear the stack
{GOTO gby}
{:write_user} * Update user record in user file
{ROPE %datadir%USER.MHS,WU3}
{WOPE %datadir%$$$TEMP.MHS}
{:WU1} {CALL read_rec}
{COMP login_name,%u_temp1}
{IFCO WU2}
{CALL write_rec}
{GOTO WU1}
{:WU2} {CALL user_temp}
{CALL write_rec}
{GOTO WU1}
{:WU3} {POPS} ** pop read_rec return addr
{WCLO}
{EXEC-N del %datadir%USER.MHS}
{EXEC-N ren %datadir%$$$TEMP.MHS USER.MHS}
{SETV u_temp1}
{SETV u_temp2}
{SETV u_temp3}
{RETURN}
{:write_rec} * Write a user record
{WRIT %u_temp1} * IN: name
{WRIT %u_temp2} * IN: password
{WRIT %u_temp3} * IN: protocol
{RETURN}
{:read_user} * Read a user record
{IFEX %datadir%USER.MHS,,RU3} * IN: %login_name
{ROPE %datadir%USER.MHS,RU2}
{:RU1} {CALL read_rec}
{COMP lname,%u_temp1}
{IFCO ,RU1}
{CALL temp_user}
{RCLO}
{GOTO RU4}
{:RU2} {POPS}
{:RU3} {SETV password} * Indicate not found
{:RU4} {SETV u_temp1}
{SETV u_temp2}
{SETV u_temp3}
{RETURN}
{:read_rec} * Read a user record
{READ u_temp1} * OUT: name
{READ u_temp2} * OUT: password
{READ u_temp3} * OUT: protocol
{RETURN}
{:user_temp} * User data to temp
{SETV u_temp1,%login_name}
{SETV u_temp2,%password}
{SETV u_temp3,%protocol}
{RETURN}
{:temp_user} * Temp to user data
{SETV login_name,%u_temp1}
{SETV password,%u_temp2}
{SETV protocol,%u_temp3}
{RETURN}
--------------------------------------------* Login functions -----------------
{:new_user} * Get new user information
{SETV login_name,%lname}
{SETV tries,0}
{:NU1} {INCR tries}
{COMP tries,3} {IFCO-G NU4}
{SEND ^J^MEnter a password: }
{CALL get_password}
{COMP pass} {IFCO NU1}
{SETV password,%pass}
{SEND ^J^MRe-enter for verification: }
{SETV tries,0}
{:NU2} {INCR tries}
{COMP tries,3} {IFCO-G NU4}
{CALL get_password}
{COMP password,%pass} {IFCO ,NU1}
{:NU3} {SETV new_start,1}
{CALL get_protocol}
{SEND ^J^MSaving user information.}
{WOPE-A %datadir%USER.MHS}
{CALL user_temp}
{CALL write_rec}
{WCLO}
{SETV SUCCESS,true}
{:NU4} {SETV tries}
{SETV lname}
{SETV pass}
{RETURN}
{:login_user} * Login user
{SETV SUCCESS} * OUT: %SUCCESS
{SETV tries,0} * OUT: %login_name
{:LU0} {INCR tries} * OUT: %password
{COMP tries,3} {IFCO-G LU5} * OUT: %new_start
{CALL get_name} * OUT: %protocol
{IFCO LU0}
{CALL read_user}
{COMP password} ** null password means not found
{IFCO ,LU3}
{SEND ^J^J^MName not found in user list.^J^M}
{SEND Is "%lname" correct? (Y/N)}
{:LU1} {CALL get_key}
{IFCO LU1}
{COMP ch,y} {IFCO ,LU0}
{SEND ^J^J^MLogin as a new user? (Y/N)}
{:LU2} {CALL get_key}
{IFCO LU2}
{COMP ch,n} {IFCO gby,new_user}
{:LU3} {SETV tries,0}
{:LU4} {INCR tries}
{COMP tries,3} {IFCO-G LU5}
{SEND ^J^Mpassword: }
{CALL get_password}
{COMP password,%pass}
{IFCO ,LU4}
{SETV SUCCESS,true}
{:LU5} {SETV tries}
{SETV lname}
{SETV pass}
{RETURN}
--------------------------------------------* Dos functions--------------------
{:change_dir} * Change Dir
{SEND ^J^MCD }
{GETS cd,70,CD1}
{EXEC-N CD %cd}
{:CD1} {SETV cd}
{RETURN}
{:do_dir} * Directory
{CALL cls}
{SEND ^J^MDIR }
{GETS dir,70}
{EXEC-N DIR /-p %dir > %datadir%DIR.TMP}
{SETV dump_file,%datadir%DIR.TMP}
{CALL dsp_file}
{CALL press_any_key}
{SETV dir}
{RETURN}
{:type_file} * Type a file
{CALL cls}
{SEND ^J^MTYPE }
{GETS type,70,TF1}
{SEND ^J^M}
{SETV dump_file,%type}
{CALL dsp_file}
{CALL press_any_key}
{:TF1} {SETV type}
{RETURN}
{:erase_file} * Erase a file
{SEND ^J^M^J^M(CR to abort)}
{SEND ^J^MERASE }
{GETS erase,70,EF1}
{COMP erase,*.*}
{IFCO ,EF4}
{SEND ^J^M*.* not allowed!}
{CALL press_any_key}
{GOTO EF1}
{:EF4} {IFEX %erase,,EF2}
{SEND ^J^MErase %erase (Y/N): }
{:EF3} {CALL get_key}
{IFCO EF3}
{COMP ch,y} {IFCO ,erase_file}
{EXEC-N ERASE %erase > nul}
{GOTO EF1}
{:EF2} {SEND ^J^MFile not found.}
{GOTO erase_file}
{:EF1} {SETV erase}
{RETURN}
{:copy_file} * Copy a file
{SEND ^J^MCOPY }
{GETS copy,70,CF1}
{EXEC-N COPY %copy > nul}
{:CF1} {SETV copy}
{RETURN}
{:rename_file} * Rename a file
{SEND ^J^MREN }
{GETS ren,70,RF1}
{EXEC-N REN %ren > nul}
{:RF1} {SETV ren}
{RETURN}
{:exit_to_dos} * Exit to dos with DOORWAY.EXE
{COMP mspeed,local}
{IFCO EX1}
{EXEC-S DOORWAY PORT:%_pad:%_irq /M:60 /G:ON /A:ON /V:D^U /O:T /S:* /C:DOS}
{GOTO EX2}
{:EX1} {SHELL}
{:EX2} {RETURN}
{:dos_download} * Download a file
{SETV proto} * IN: %protocol
{COMP protocol,}
{IFCO ,DD1}
{CALL get_protocol}
{:DD1} {SEND ^J^MFile: }
{GETS pr_file,70,DD2}
{SETV proto,s%protocol}
{SETV save_filedir,%filedir}
{SETV filedir}
{CALL transfer_file}
{CALL cls}
{SETV filedir,%save_filedir}
{SETV save_filedir}
{IFCO DD2}
{SEND ^J^MUnsuccessful download}
{CALL press_any_key}
{:DD2} {SETV pr_file}
{RETURN}
{:dos_upload} * Upload a file
{SETV proto} * IN: %protocol
{COMP protocol,}
{IFCO ,DU1}
{CALL get_protocol}
{:DU1} {COMP protocol,x}
{IFCO ,DU2}
{SEND ^J^MFile: }
{GETS pr_file,70,DU3}
{:DU2} {SETV proto,r%protocol}
{SETV save_filedir,%filedir}
{SETV filedir}
{CALL transfer_file}
{CALL cls}
{SETV filedir,%save_filedir}
{SETV save_filedir}
{IFCO DU3}
{SEND ^J^MUnsuccessful upload}
{CALL press_any_key}
{:DU3} {SETV pr_file}
{RETURN}
{:log_drive} * Log a drive
{SEND ^J^MChange to which drive (A:, B:, C:, etc): }
{GETS log,2,LD2}
{:LD1} {SEND ^J^MChange to drive %log (Y/N)? }
{CALL get_key}
{IFCO LD1}
{COMP ch,n} {IFCO LD2}
{COMP ch,y} {IFCO ,LD1}
{EXEC-N %log}
{:LD2} {SETV log}
{RETURN}
{:dos_stuff} * Dos Menu
{SEND ^J^MDos password: }
{CALL get_password}
{COMP pass,%dospassword}
{IFCO ,DS3}
{SETV pr_down} * Use current directories
{SETV pr_up}
{PUSH}
{:DS1}
{PAUS-T 2}
{CALL cls}
{SEND ┌───────────────────────────────────────────────────┐^J^M}
{SEND │ DOS Commands │^J^M}
{SEND └───────────────────────────────────────────────────┘^J^M}
{SEND [A] Log New Drive^J^M}
{SEND [C] Change Dir [U] Upload to current dir^J^M}
{SEND [D] Directory [V] Download from current dir^J^M}
{SEND [E] Erase File^J^M}
{SEND [K] Copy File [Z] Run DOORWAY program (shell^J^M}
{SEND [T] Type File to DOS in local mode)^J^M}
{SEND [R] Rename File^J^M^J^M}
{SETV prompt,DOS (CR to return)}
{CALL menu}
{COMP ch,~} {IFCO DS2}
{COMP ch,a} {IFCO log_drive}
{COMP ch,c} {IFCO change_dir}
{COMP ch,d} {IFCO do_dir}
{COMP ch,e} {IFCO erase_file}
{COMP ch,k} {IFCO copy_file}
{COMP ch,r} {IFCO rename_file}
{COMP ch,t} {IFCO type_file}
{COMP ch,u} {IFCO dos_upload}
{COMP ch,v} {IFCO dos_download}
{COMP ch,z} {IFCO exit_to_dos}
{GOTO DS1}
{:DS2} {POPS}
{:DS3} {SETV pass}
{SETV prompt}
{RETURN}
--------------------------------------------* Xfer functions-------------------
{:dfiles} * Download a file
{SETV proto} * IN/OUT: %protocol
{COMP protocol,}
{IFCO ,DX1}
{CALL get_protocol}
{:DX1} {SEND ^J^MFile: }
{GETS pr_file,70,DX2}
{SETV pr_file,%filedir%%pr_file}
{SETV proto,s%protocol}
{CALL transfer_file}
{CALL cls}
{IFCO DX2}
{SEND ^J^MUnsuccessful download}
{CALL press_any_key}
{:DX2} {SETV pr_file}
{RETURN}
{:ufiles} * Upload a file
{SETV proto} * IN/OUT: %protocol
{SETV pr_file,%filedir}
{COMP protocol,}
{IFCO ,UF1}
{CALL get_protocol}
{:UF1} {COMP protocol,x}
{IFCO ,UF2}
{SEND ^J^MFile: }
{GETS dfiles,70,UF3}
{SETV pr_file,%pr_file%%dfiles}
{IFEX %pr_file,,UF2}
{SEND ^J^MFile already exists!^J^M}
{CALL Press_Any_Key}
{GOTO UF3}
{:UF2} {SETV proto,r%protocol}
{CALL transfer_file}
{CALL cls}
{IFCO UF3}
{SEND ^J^MUnsuccessful upload}
{CALL press_any_key}
{:UF3} {SETV pr_file}
{SETV dfiles}
{RETURN}
-------------------------------------------------------------------------------
{:chat} * Chat w/word wrap
{BEEP} {BEEP} {BEEP}
{SETV chatc,3}
{SEND ^J^M^J^M(Type 'bye' to exit chat mode)^J^M}
{SEND ^J^M1> Hi %login_name, what's up?}
{SEND ^J^M2>}
{:CT1} {SETV chatl}
{:CT2} {SEND ^J^M%chatc> %chatl}
{INCR chatc}
{GETS-AH chatl,70}
{COMP chatl,bye} {IFCO CT5}
{LENGTH %chatl}
{COMP %_len,69} {IFCO-LE CT1}
{SETV x,71}
{:CT3} {DECR x}
{COMP x,50} {IFCO-LE CT1}
{SUBS ch,%x,1,%chatl}
{COMP ch, } {IFCO ,CT3}
{INCR x}
{SUBS chatl,%x,255,%chatl}
{:CT4} {COMP x,%_len} {IFCO-G CT2}
{SEND ^H ^H}
{INCR x}
{GOTO CT4}
{:CT5} {RETURN}
-------------------------------------------------------------------------------
{:time_online} * Elapsed time
{SEND ^J^MTime online: %_elap^J^M}
{CALL Press_Any_Key}
{RETURN}
--------------------------------------------* User info------------------------
{:chg_name} * Get new login name
{SEND ^J^M} * OUT: %lname
{:CN1} {CALL get_name}
{RETURN}
{:chg_password} * Get new password
{SEND ^J^M} * OUT: %pass
{:CP1} {SEND ^J^MNew password: }
{GETS pass,,CP1}
{RETURN}
{:chg_protocol} * Get new protocol
{CALL cls} * OUT: %protocol
{CALL get_protocol}
{RETURN}
{:save_user} * Save new information
{SEND ^J^MSaving} * IN: %lname,%pass,%protocol
{SETV login_name,%lname} * OUT: %login_name,%password
{SETV password,%pass} * OUT: %uprot
{SETV uprot,%protocol}
{CALL write_user}
{RETURN}
{:fil_dir}
{EXEC-N DIR %filedir%*.* > %datadir%DIR.TMP}
{SETV dump_file,%datadir%DIR.TMP}
{CALL dsp_file}
{CALL press_any_key}
{RETURN}
{:update_info} * User info menu
{SETV lname,%login_name}
{SETV pass,%password}
{SETV uprot,%protocol}
{PUSH}
{:UI1} {CALL cls}
{SEND ^J^M}
{SEND ^J^M1. User name: %lname}
{SEND ^J^M2. Password: %pass}
{SEND ^J^M3. Protocol: %protocol}
{SEND ^J^M}
{SEND ^J^MCommand (CR to return) [%_tim]: }
{CALL get_key}
{IFCO UI2}
{COMP ch,1} {IFCO chg_name}
{COMP ch,2} {IFCO chg_password}
{COMP ch,3} {IFCO chg_protocol}
{GOTO UI1}
{:UI2} {SEND ^J^MSave changes (Y/N)? }
{CALL get_key}
{IFCO UI3}
{COMP ch,n} {IFCO UI3}
{COMP ch,y} {IFCO ,UI2}
{CALL save_user}
{:UI3} {POPS}
{SETV ch}
{SETV lname}
{SETV pass}
{SETV protocol,%uprot}
{RETURN}
-------------------------------------------------------------------------------
{:main_menu} * Main menu
{SETV pr_down,%filedir} * Protocol download path
{SETV pr_up,%filedir} * Protocol upload path
{PUSH}
{:MM1}
{PAUS-T 2}
{CALL cls}
{SEND ┌───────────────────────────────────────────────────┐^J^M}
{SEND │ Main Menu │^J^M}
{SEND └───────────────────────────────────────────────────┘^J^M}
{SEND [D] Download Files [T] Time online^J^M}
{SEND [U] Upload Files [G] Goodbye^J^M}
{SEND [F] File List [S] DOS Menu^J^M}
{SEND [C] Chat [I] User Info^J^M}
{SEND [P] Protocol (%protocol)^J^M^J^M}
{SETV prompt,Main Menu}
{CALL menu}
{COMP ch,c} {IFCO chat}
{COMP ch,f} {IFCO fil_dir}
{COMP ch,s} {IFCO dos_stuff}
{COMP ch,g} {IFCO MM3}
{COMP ch,t} {IFCO time_online}
{COMP ch,i} {IFCO update_info}
{COMP ch,d} {IFCO dfiles}
{COMP ch,p} {IFCO get_protocol}
{COMP ch,u} {IFCO ufiles}
{GOTO MM1}
{:MM3} {SEND ^J^MAre you sure (Y/N)? }
{CALL get_key}
{IFCO MM1}
{COMP ch,y} {IFCO ,MM1}
{:MM2} {POPS}
{RETURN}
--------------------------------------------* Waiting for a call funcs--------
{:user_edit}
{SETV ed,%datadir%USER.MHS}
{IFEX %ed,,UE1}
{EDIT %ed}
{:UE1} {GOTO wait_for_call}
{:view_scroll}
{SCROLL}
{GOTO wait_for_call}
{:shell_dos}
{SHELL}
{GOTO wait_for_call}
{:wait_for_call}
{SPOC n}
{CLEAR}
{DISP 1,29,4E, ^(COMMO^) HOST MODE }
{DISP 4,29,0E,The Host with the Most}
{DISP 8,29,0E, 1 - Login locally}
{DISP 9,29,0E, 2 - Edit User File}
{DISP 10,29,0E, 3 - View Scrollback}
{DISP 11,29,0E, 4 - Shell to DOS}
{DISP 12,29,0E, Q - Quit}
{DISP 22,1,0E, Last user: %login_name (%mspeed)}
{DISP 24,29,4e, Waiting for a Call }
{DISP 20,1,, }
{DISP 20,1,0E, Command: }
{SETG 0,,l}
{:WF1} {GETS mring,10,WF1}
{SETG %inact_time,time_out}
{DISP 24,29,07, }
{COMP mring,1} {IFCO WF2}
{COMP mring,2} {IFCO user_edit}
{COMP mring,3} {IFCO view_scroll}
{COMP mring,4} {IFCO shell_dos}
{COMP mring,q} {IFCO WF3}
{COMP mring,%ring_string} {IFCO ,Wait_for_call}
{SPOC y}
{DISP 24,29}
{SEND ~ATA^M~}
{SETL 45,wait_for_call}
{DISP 20,1,7, Waiting for connect: }
{LOOK %connect_string}
{PAUS 1}
{RETURN}
{:WF2} {SETV mspeed,LOCAL}
{LOCA y}
{SPOC n}
{RETURN}
{:WF3} {CLEAR}
Clean up variables
{SETV ed} {SETV mring} {SETV filedir} {SETV mspeed}
{SETV new_start} {SETV login_name} {SETV password} {SETV dump_file}
{SETV password} {SETV protocol} {SETV prompt} {SETV ch}
{SETV datadir} {SETV dospassw} {SETV chatc}
{SETV chatl} {SETV x} {SETV inact_time} {SETV proto}
{SETV uprot} {SETV hotkeys} {SETV connect_string}
{SETV attention_string} {SETV ring_string}
{LOCA n}
{RTRA-i n}
{UNLOad} {}
--------------------------------------------* Main BBS loop ------------------
{:BBS}
{CALL setup}
{CALL Wait_For_Call}
{CALL cls}
{SEND ^J^M HOST MODE^J^M^J}
{SEND Written in ^(COMMO^) macro language^J^M^J^J}
{CALL login_user}
{COMP success,TRUE}
{IFCO ,gby}
{:BB0} {ELAP}
{CALL main_menu}
{:gby}
{SEND ^J^M^JThanks for calling...^J^M}
{HANG y}
{COMP success,TRUE}
{IFCO ,hng}
{SEND Saving}
{CALL write_user}
{:hng} {SETV success}
{GOTO BBS}
- end -